package com.punch.order.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.punch.common.page.PageInfo;
import com.punch.common.query.registration.RegistrationQueryInfo;
import com.punch.common.vo.order.CourseOrderStudentVO;
import com.punch.common.vo.order.SimpleCourseOrderVO;
import com.punch.common.vo.order.StudentSignUpVO;
import com.punch.common.vo.registration.RegistrationVO;
import com.punch.order.model.OrderCourseSnapshot;

import java.time.LocalDate;
import java.util.List;

/**
 * 课程订单service
 *
 * @author Liang
 */
public interface CourseOrderService extends IService<OrderCourseSnapshot> {

    /**
     * 根据班级id查询班级报名情况
     *
     * @param registrationQueryInfo 班级报名情况条件
     * @return RegistrationVO
     */
    PageInfo<RegistrationVO> registration(RegistrationQueryInfo registrationQueryInfo);

    /**
     * @param registrationQueryInfo
     * @return
     */
    PageInfo<StudentSignUpVO> studentSignUp(RegistrationQueryInfo registrationQueryInfo);

    /**
     * 获取开班课程的报名学生id列表
     *
     * @param classId 班级课程id
     * @return 学生列表
     */
    List<CourseOrderStudentVO> getCourseStudent(Long courseId, Long classId);


    /**
     * 统计开班课程的报名学生
     *
     * @param classId 班级课程id
     * @return 学生列表
     */
    int getCourseStudentCount(Long courseId, Long classId);

    /**
     * 更新该课程下开班的课程订单的已完成课时数
     *
     * @param courseId 课程id
     * @param classId  班级id
     * @return boolean
     */
    Boolean updateClassFinishCount(Long courseId, Long classId);

    /**
     * 获取学生已报名的订单
     *
     * @param studentId 学生id
     * @return list
     */
    List<Long> getStudentCourseOrderId(Long studentId);

    /**
     * 学生是否报名该课程
     *
     * @param classId   课程班级id
     * @param studentId 学生id
     * @return boolean
     */
    boolean isSignUp(Long classId, Long studentId);

    /**
     * 某学校某年级下的某个班级报名某个课程情况
     *
     * @param schoolName 学校名称
     * @param gradeYear  年级
     * @param gradeClass 班级
     * @param className  报班名称
     * @return SimpleCourseOrderVO
     */
    List<SimpleCourseOrderVO> getSimpleCourseClassOrder(String schoolName, String gradeYear, String gradeClass, String className);

    /**
     * 运营修改开班时间
     *
     * @param classId  课程id
     * @param openDate 开班时间
     */
    void feignUpdateCourseOrderOpenDate(Long classId, LocalDate openDate);

    /**
     * 运营修改教师
     *
     * @param classId     课程id
     * @param teacherName 教师名称
     */
    void feignUpdateCourseOrderTeacher(Long classId, String teacherName);

    /**
     * 运营修改教室
     *
     * @param classId       课程id
     * @param classRoomName 教师
     */
    void feignUpdateCourseOrderClassRoom(Long classId, String classRoomName);
}
